package com.gexin.controller.system.templateWuliu;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gexin.common.utils.StringUtil;
import com.gexin.core.web.SystemBaseController;
import com.gexin.model.shop.ShopInfo;
import com.gexin.model.system.AddrAreas;
import com.gexin.model.system.AddrProvinces;
import com.gexin.model.template.TemplateArea;
import com.gexin.model.template.TemplateWuliu;
import com.gexin.model.template.TemplateWuliuItem;
import com.jfinal.ext.route.ControllerBind;
import com.jfinal.kit.JsonKit;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

/**
 * 物流模版的总表
 * @author 方俊逸
 *  2016-07-06
 *
 */

@ControllerBind(controllerKey = "/system/templateWuliu", viewPath = "WEB-INF/system/wuliuTemplate")
public class TemplateAreaController extends SystemBaseController {
	private static Log log = Log.getLog(TemplateAreaController.class);

	public void index() {
		log.info("测试物流模版");
		success();
	}

	//模版列表
	public void list() {
		List<TemplateWuliu> template_list = TemplateWuliu.dao.getTemplateListByShopId(ShopInfo.shop_id);
		setAttr("template_list", template_list);
		render("wuliutemplate.html");
	}

	public void add() {
		render("area_choose_2.html");
	}

	//返回所有的
	public void ajax_add() {
		log.info("进入增加页面");
		success(AddrProvinces.dao.getAddrZtree());
	}

	/**
	 * 新建模版   保存 
	 * 参数  areas_id_list
	 * 参数  fee
	 * "data":{ item:[{jsonString:"","skuString":"","idString":"",fee:  },{},{}] ,remainJson:""   }
	 * template_name
	 */
	public void addTemplate() {
		final JSONObject jsonObject = JSONObject.parseObject(getPara("data"));
		String remainJson = jsonObject.getString("remainJson");
		//先做一个模版的工作   将areas_id_list  进行分割
		log.info("增加一个物流模版");
		TemplateWuliu template = new TemplateWuliu();
		template.setRemainAddJson(remainJson);//存储保留剩余的jsonSrtring
		template.setShopId(ShopInfo.shop_id);
		template.setSort(0);
		template.setTemplateName(getPara("template_name", ""));
		template.setCreatetime(new Date());
		template.save();
		
		final  Integer  template_id =  template.getId();
		Runnable myRunnable = new Runnable() {
			public void run() {
				addTemplateArea(ShopInfo.shop_id, template_id);//增加所有的数据
				//给所有的template_id赋值    2016-07-11   改到直接  在加入的时候赋值  
				//TemplateArea.dao.initTemplateId(getShopIdByCookie(),  template.getId());
				//后台将data转化为json
				JSONArray array = JSONArray.parseArray(jsonObject.getString("item"));
				//遍历一次存储一次    
				for (Object item : array) {
					JSONObject object = JSONObject.parseObject(JsonKit.toJson(item));
					TemplateWuliuItem.dao.addTemplateItem(template_id, object.getInteger("first_num"), new BigDecimal(object.getString("fee")), object.getInteger("continue_num"), new BigDecimal(object.getString("continue_fee")), object.getString("idString"), object.getString("skuString"), object.getString("jsonString"));
					//
				}
				//
				getRequest().removeAttribute("data");
			}
		};
		Thread thread = new Thread(myRunnable);
		thread.start();
		success();
	}

	/**
	 * fang  2016-07-07
	 * 修改模版
	 * 返回   剩余的和还有的  参数  template_id
	 * 这个跟增加还不一样
	 * "data":{template_id:"", item:[{item_id:"",jsonString:"","skuString":"","idString":"",fee:  },{},{}] ,remainJson:""   }
	 */
	///  shangjia/templateWuliu/edit
	public void edit() {
		//System.err.println("id是"+getParaToInt(0));
		setAttr("template_id", getParaToInt(0));
		setAttr("template", TemplateWuliu.dao.findById(getParaToInt(0)));
		render("wuliutemplate_edit.html");
	}

	public void ajax_edit() {
		int template_id = getParaToInt("template_id");
		TemplateWuliu tempalte = TemplateWuliu.dao.findById(template_id);
		List<TemplateWuliuItem> item_list = TemplateWuliuItem.dao.getItemsByTemplateId(template_id);
		tempalte.put("item_list", item_list);
		success(tempalte);
	}

	/**
	 * 修改保存
	 * fang  2016-07-07
	 *  * 这个跟增加还不一样
	 * "data":{template_id:"", item:[{item_id:"",jsonString:"","skuString":"","idString":"",fee:  },{},{}] ,remainJson:""   }
	 * template_name
	 */
	public void editTemplate() {
		//int template_id=getParaToInt("template_id");
		JSONObject jsonObject = JSONObject.parseObject(getPara("data"));
		String remainJson = jsonObject.getString("remainJson");
		int template_id = jsonObject.getInteger("template_id");
		//首先根据template 把所有的state  置为2
		TemplateArea.dao.updateAreaStateById(template_id);
		TemplateWuliu template = TemplateWuliu.dao.findById(template_id);
		template.setRemainAddJson(remainJson);//存储保留剩余的jsonSrtring
		template.setCreatetime(new Date());
		template.setTemplateName(getPara("template_name", ""));
		template.update();//保存template剩余信息
		final JSONArray array = JSONArray.parseArray(jsonObject.getString("item"));
		Runnable myRunnable = new Runnable() {
			public void run() {
				/**
				 * fang 2016-07-11
				 * 删除     delate_id
				 */
				String delete_id = getPara("delete_id");
				if (!StringUtil.isEmpty(delete_id)) {
					String[] deleteList = delete_id.split(",");
					for (String id : deleteList) {
						TemplateWuliuItem.dao.deleteById(id);
					}
				}
				//遍历一次更新一次tempalte_item 
				for (Object item : array) {
					JSONObject object = JSONObject.parseObject(JsonKit.toJson(item));
					TemplateWuliuItem.dao.editTemplateItem(object.getInteger("item_id"), object.getInteger("first_num"), new BigDecimal(object.getString("fee")), object.getInteger("continue_num"), new BigDecimal(object.getString("continue_fee")), object.getString("idString"), object.getString("skuString"), object.getString("jsonString"));
					//
				}
			}
		};
		Thread thread = new Thread(myRunnable);
		thread.start();
		success();
	}

	/**
	 * fang  2016-07-11
	 * 模版编辑的时候  
	 * 添加模版,假的添加  item,置  state=2
	 * 返回id
	 * 参数   template_id
	 */
	public void ajax_getAddItemId() {
		int template_id = getParaToInt("template_id");
		TemplateWuliuItem templateWuliuItem = new TemplateWuliuItem();
		templateWuliuItem.setTemplateId(template_id);
		templateWuliuItem.setItemState(2);//这是临时的
		if (templateWuliuItem.save()) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("state", true);
			map.put("data", templateWuliuItem.getId());
			renderJson(map);
		} else {
			fail("生成id失败");
		}
	}

	/**
	 * 删除模版
	 * fang  2016-07-07
	 * 还要把对应商品的模版制空
	 * 
	 */
	public void deleteTemplate() {
		//删除对应的地区
		//将对应的商品的template_id置空
		//还要把对应商品的模版制空
		if (TemplateWuliu.dao.deleteById(getParaToInt("template_id"))) {
			TemplateWuliuItem.dao.deleteItemByTemplateId(getParaToInt("template_id"));
			TemplateArea.dao.deleteAreaByTemplateId(getParaToInt("template_id"));
			TemplateArea.dao.deleteProductTemplateIdByTemplateId(getParaToInt("template_id"));
			success();
		} else {
			fail();
		}
	}

	//往总表里面增加数据  一个山沟只增加一次
	//同事往num表里面增加一条数据
	public void addTemplateArea(String shop_id, int template_id) {
		long starTime = System.currentTimeMillis();
		List<AddrAreas> list_areas = AddrAreas.dao.getAllAreas();
		List<String> sql_list = new ArrayList<String>();
		for (AddrAreas area : list_areas) {
			//AddrAreas.dao.insertData(shop_id, area.getAreaid(),template_id);
			//log.info("插入一条");
			String str = String.format("INSERT INTO t_template_area(shop_id,area_id,template_id)  VALUES ('%s', %s,%s)", shop_id, area.getAreaid(), template_id);
			sql_list.add(str);
		}
		Db.batch(sql_list, sql_list.size());
		//AddrAreas.dao.insertData(shop_id, list_areas.get(0).getAreaid());
		long endTime = System.currentTimeMillis();
		long Time = endTime - starTime;
		log.info("模版运行时间" + Time);
	}

}
